\subsubsection{x86}

Let's see what we get in (MSVC 2010):

\lstinputlisting[caption=MSVC 2010,style=customasmx86]{patterns/12_FPU/2_passing_floats/MSVC_EN.asm}

\myindex{x86!\Instructions!FLD}
\myindex{x86!\Instructions!FSTP}

\FLD and \FSTP move variables between the data segment and the FPU stack. 
\GTT{pow()}\footnote{a standard C function, raises a number to the given power (exponentiation)}
takes both values from the stack of the FPU and 
returns its result in the \ST{0} register.
\printf takes 8 bytes from the local stack and interprets them as \Tdouble type variable.

By the way, a pair of \MOV instructions could be used here for moving values from the memory
into the stack, because the values in memory are stored in IEEE 754 format, and pow() also takes them in this
format, so no conversion is necessary.
That's how it's done in the next example, for ARM: \myref{FPU_passing_floats_ARM}.

